package com.wenx.v3system.modular.platform.service;

import com.wenx.v3system.modular.platform.domain.dto.PlatformRoleMenuDto;

import java.util.List;

/**
 * 平台角色菜单关联服务接口
 * 简化的菜单权限管理
 * 
 * @author wenx
 */
public interface PlatformRoleMenuService {

    /**
     * 根据角色编码获取菜单列表
     * 
     * @param roleCode 角色编码
     * @return 菜单列表
     */
    List<PlatformRoleMenuDto> getMenusByRoleCode(String roleCode);

    /**
     * 根据角色编码获取菜单编码列表
     * 
     * @param roleCode 角色编码
     * @return 菜单编码列表
     */
    List<String> getMenuCodesByRoleCode(String roleCode);

    /**
     * 根据角色ID获取菜单编码列表
     * 
     * @param roleId 角色ID
     * @return 菜单编码列表
     */
    List<String> getMenuCodesByRoleId(Long roleId);

    /**
     * 为角色分配菜单
     * 
     * @param roleCode 角色编码
     * @param menuCodes 菜单编码列表
     */
    void assignMenusToRole(String roleCode, List<String> menuCodes);

    /**
     * 根据菜单编码获取拥有该菜单的角色编码列表
     * 
     * @param menuCode 菜单编码
     * @return 角色编码列表
     */
    List<String> getRoleCodesByMenuCode(String menuCode);

    /**
     * 检查角色是否拥有指定菜单
     * 
     * @param roleCode 角色编码
     * @param menuCode 菜单编码
     * @return 是否拥有
     */
    boolean hasMenu(String roleCode, String menuCode);

    /**
     * 删除角色的所有菜单关联
     * 
     * @param roleCode 角色编码
     */
    void removeAllMenusByRoleCode(String roleCode);

    /**
     * 删除指定菜单的所有角色关联
     * 
     * @param menuCode 菜单编码
     */
    void removeAllRolesByMenuCode(String menuCode);

    /**
     * 根据用户角色编码列表获取用户的所有菜单编码
     * 
     * @param userRoleCodes 用户角色编码列表
     * @return 菜单编码列表
     */
    List<String> getUserMenuCodes(List<String> userRoleCodes);
}